/**
 * @file        CANopen.c
 * @ingroup     CO_CANopen
 * @author      MAMAMA
 * @copyright   2010 - 2020 www.wingbow.com.cn
 */

#ifndef CANopen_H
#define CANopen_H 

#include "stm32f4xx.h"
#include <stdbool.h>

#include "CANopen_config.h"
#include "CANopen_types.h"

/* Global Variables */
extern CanNodeInfo_T CanNodes[MAX_CAN_NODE];

void canopen_init(void);

/**
* @brief 解析Can的消息
* @return true：消息符合Canopen
*         false：不是Canopen消息
*/ 
bool canopen_parse_msg(CanRxMsg* msg);

uint8_t canopen_sdo_tx(uint16_t node_id, SDOTx_T* sdo);
uint8_t canopen_nmt(uint8_t node_id, uint8_t CS);
/* 不含计数器的同步帧 */
uint8_t canopen_sync(void);

/* SDO任务循环，会对每个节点发送SDOConfigs中有效的消息 */
void sdo_loop(void);
void nmt_loop(void);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* CANopen_H */
